package com.wyx.suanfa;

import javax.swing.tree.TreeNode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * @author 王艺锡
 * @version 1.0
 */
public class levelOrder {
    //给你二叉树的根节点 root ，返回其节点值的 层序遍历 。 （即逐层地，从左到右访问所有节点）。

}

/*
* /**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }


class Solution {
    public List<List<Integer>> reList = new ArrayList<>();

    public List<List<Integer>> levelOrder(TreeNode root) {
        checkFun(root);
        return reList;
    }


    public void checkFun(TreeNode root){
        if(root == null){
            return;
        }
        //队列
        Queue<TreeNode> que = new LinkedList<>();
        //将根节点先压入队列
        que.offer(root);

        //如果队列不为空，就代表还有元素
        while(!que.isEmpty()){
            //记录当前层次有多少个元素
            int len = que.size();
            //创建一个集合用于存放当前层的元素
            List<Integer> itemList = new ArrayList<>();
            while(len > 0){
                //取出一个元素，放入itemList集合，并将他的左右孩子压入队列
                TreeNode tempNode = que.poll();
                itemList.add(tempNode.val);

                if(tempNode.left != null){
                    que.offer(tempNode.left);
                }

                if(tempNode.right != null){
                    que.offer(tempNode.right);
                }
                len--;
            }

            reList.add(itemList);
        }


    }
}*/
